//控制所有游戏对象行为，覆写了原来的游戏API
/**
 * 不允许玩家再调用官方的api只能使用TickStream提供的API 
 */


//
global.intent = function(objectId,call,data){

    //封装
    let pack = {
        call:call,
        data:data
    }

    //查找有无对应的objectid
    if(intent.cache[objectId] == null){
        intent.cache[objectId] = new util.LinkedQueue();
        intent.cache[objectId].pushFoot(pack);//尾部插入intent
    }else{
        intent.cache[objectId].pushFoot(pack);//尾部插入intent
    }

    return 0;

}

intent.cache = {};
intent.handle = function(){
    //解析

    for(let objectId in intent.cache){//遍历每个对象
        intent.handleObject(objectId);
    }

}

intent.handleObject = function(objectId){
    let linked = intent.cache[objectId];//获取对象的intent链表
    let pack = linked.popHead();//只取出最头部的一个

    if(pack == null){//如果没有数据直接return
        return;
    }

    /**
     * 处理时间膨胀
     */
    let object = Game.getObjectById(objectId);
    let roomName = object.room.name;
    //判断是否可以执行
    if(TimeDilation.isDilation(roomName)){
        return;
    }

    intent.handleApi(pack.call,object,pack.data);
}

intent.handleApi = function(apiName,object,data){

    let result = -10001;
    switch(apiName){
        case 'wait'://intent等待，表示该tick不做任何事
            break;
        case 'spawn':
            break;
        case 'move':
                result = object.move(data.direction);
            break;

        case 'harvest':
            break;
    }

    console.log(result);
}

intent.display = function(){
    for(let objectId in intent.cache){
        console.log(objectId + " :");
        intent.cache[objectId].display();
    }
}


//移动测试代码
// let creep = Game.creeps.T2;
// const path = creep.pos.findPathTo(29,34);
// for(let i = 0 ; i<path.length ; i++){
    
//     let data = {
//         targetX:path[i].x,
//         targetY:path[i].y,
//         direction:path[i].direction
//     };
//     intent(creep.id,'move',data);
// }
